from django_redis import get_redis_connection
import pickle,base64


def merge_carts_cookie_to_redis(request, response):
    """合并购物车"""
    # 获取cookie
    carts_str = request.COOKIES.get('carts')
    # 判断cookie购物车数据是否存在
    if carts_str is None:
        # 不存在返回结束函数
        return
    # 存在将字符串转换为字典
    carts_dict = pickle.loads(base64.b64decode(carts_str.encode()))
    # 创建redis连接对象
    redis_conn = get_redis_connection('carts')
    # 创建redis管道
    pl = redis_conn.pipeline()
    # 获取user对象,用request获取函数必须在login()后面调用
    user = request.user
    for sku_id in carts_dict:
        # 将cookie中的的数据存到redis的hash字典中
        pl.hset('carts_%s'%user.id, sku_id, carts_dict[sku_id]['count'] )
        # 判断selected
        if carts_dict[sku_id]['selected']:
            # 勾选往redis集合中添加sku_id
            pl.sadd('selected_%s'%user.id, sku_id)
        else:
            # 没勾选从redis集合中删除sku_id
            pl.srem('selected_%s'%user.id, sku_id)
    pl.execute()
    # 删除cookie购物车
    response.delete_cookie('carts')